package com.zw.mes.module.system.service;

import com.zw.mes.constant.Constant;
import com.zw.mes.entity.sys.Dept;
import com.zw.mes.module.system.mapper.DeptMapper;
import com.zw.mes.module.system.repository.DeptRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

import static com.zw.mes.constant.Constant.STATUS_NORMAL;


/**
 * @Description:
 *
 * @Author: China.sgl
 * @Date: 2019/12/6 08:42
 */
@Service
@SuppressWarnings("all")
public class DeptService {

    @Autowired
    private DeptMapper deptMapper;
    @Autowired
    private DeptRepository deptRepository;


    /**
     * 按条件查询所有部门
     *
     * @param dept 条件
     * @return List
     */
    public List<Dept> findDeptByCondition(Dept dept) {
        return deptMapper.findByCondition(dept);
    }

    /**
     * 修改部门
     *
     * @param Dept 部门信息
     * @return 影响行数
     */
    public Dept updateDept(Dept dept) {
        dept.setStatus(STATUS_NORMAL);
        return deptRepository.saveAndFlush(dept);
    }

    /**
     * 按部门名称查询部门
     *
     * @param name 部门名称
     * @return 部门信息
     */
    public Dept findDeptByName(String name) {
        return deptMapper.findByName(name);
    }

    /**
     * 保存部门信息
     *
     * @param dept 部门信息
     * @return 影响行数
     */
    public Dept saveDept(Dept dept) {
        dept.setStatus(STATUS_NORMAL);
        return deptRepository.save(dept);
    }

    /**
     * 查询用户所在部门
     *
     * @param id 用户 id
     * @return List
     */
    public List<Dept> findDeptCheckedByUserId(Integer id) {
        List<Dept> all = deptMapper.findByCondition(new Dept());
        Dept dept = deptMapper.findByUserId(id);
        if (null != dept) {
            for (Dept o : all) {
                if (o.getId().equals(dept.getId())) {
                    o.setCheckFlag(true);
                    break;
                }
            }
        }
        return all;
    }

    /**
     * 删除部门
     *
     * @param id 部门
     * @return 影响行数
     */
    public int delDept(Integer id) {
        return deptMapper.updateStatusByIdWithRecursion(id, Constant.STATUS_DELETE);
    }

    /**
     * 查询顶级部门
     *
     * @return List
     */
    public List<Dept> findAllTopLevelDept() {
        return deptMapper.findAllTopLevelDept();
    }
}
